{
 "nbformat": 4,
 "nbformat_minor": 0,
 "metadata": {
  "colab": {
   "name": "Cycle GAN",
   "provenance": [],
   "collapsed_sections": [],
   "toc_visible": true
  },
  "kernelspec": {
   "name": "python3",
   "language": "python",
   "display_name": "Python 3"
  },
  "accelerator": "GPU"
 },
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "AYV_dMVDxyc2"
   },
   "source": [
    "[![Github](https://img.shields.io/github/stars/labmlai/annotated_deep_learning_paper_implementations?style=social)](https://github.com/labmlai/annotated_deep_learning_paper_implementations)\n",
    "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/labmlai/annotated_deep_learning_paper_implementations/blob/master/labml_nn/gan/original/experiment.ipynb)\n",
    "\n",
    "## DCGAN\n",
    "\n",
    "This is an experiment training DCGAN model."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "AahG_i2y5tY9"
   },
   "source": [
    "Install the `labml-nn` package"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "ZCzmCrAIVg0L",
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "outputId": "2fe2685f-731c-4c47-854e-a4f00e485281"
   },
   "source": [
    "!pip install labml-nn"
   ],
   "execution_count": 1,
   "outputs": [
    {
     "output_type": "stream",
     "text": [
      "Collecting labml-nn\n",
      "\u001B[?25l  Downloading https://files.pythonhosted.org/packages/9d/bb/a7a6f69ab6e21de2398b5f6b0b2bb47b430e4a20ae2c8710c489e02813be/labml_nn-0.4.81-py3-none-any.whl (118kB)\n",
      "\r\u001B[K     |██▊                             | 10kB 22.6MB/s eta 0:00:01\r\u001B[K     |█████▌                          | 20kB 14.6MB/s eta 0:00:01\r\u001B[K     |████████▎                       | 30kB 12.9MB/s eta 0:00:01\r\u001B[K     |███████████                     | 40kB 12.1MB/s eta 0:00:01\r\u001B[K     |█████████████▉                  | 51kB 8.2MB/s eta 0:00:01\r\u001B[K     |████████████████▋               | 61kB 8.7MB/s eta 0:00:01\r\u001B[K     |███████████████████▍            | 71kB 8.9MB/s eta 0:00:01\r\u001B[K     |██████████████████████▏         | 81kB 9.9MB/s eta 0:00:01\r\u001B[K     |█████████████████████████       | 92kB 8.9MB/s eta 0:00:01\r\u001B[K     |███████████████████████████▊    | 102kB 8.0MB/s eta 0:00:01\r\u001B[K     |██████████████████████████████▌ | 112kB 8.0MB/s eta 0:00:01\r\u001B[K     |████████████████████████████████| 122kB 8.0MB/s \n",
      "\u001B[?25hRequirement already satisfied: torch in /usr/local/lib/python3.6/dist-packages (from labml-nn) (1.7.0+cu101)\n",
      "Collecting labml-helpers>=0.4.72\n",
      "  Downloading https://files.pythonhosted.org/packages/ec/58/2b7dcfde4565134ad97cdfe96ad7070fef95c37be2cbc066b608c9ae5c1d/labml_helpers-0.4.72-py3-none-any.whl\n",
      "Requirement already satisfied: numpy in /usr/local/lib/python3.6/dist-packages (from labml-nn) (1.19.5)\n",
      "Collecting labml>=0.4.94\n",
      "\u001B[?25l  Downloading https://files.pythonhosted.org/packages/99/b2/3a424548d74a88ce565b38f6b7e707e7c2f00bf8c7c575a1c251807e4896/labml-0.4.94-py3-none-any.whl (99kB)\n",
      "\u001B[K     |████████████████████████████████| 102kB 8.2MB/s \n",
      "\u001B[?25hCollecting einops\n",
      "  Downloading https://files.pythonhosted.org/packages/5d/a0/9935e030634bf60ecd572c775f64ace82ceddf2f504a5fd3902438f07090/einops-0.3.0-py2.py3-none-any.whl\n",
      "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.6/dist-packages (from torch->labml-nn) (3.7.4.3)\n",
      "Requirement already satisfied: future in /usr/local/lib/python3.6/dist-packages (from torch->labml-nn) (0.16.0)\n",
      "Requirement already satisfied: dataclasses in /usr/local/lib/python3.6/dist-packages (from torch->labml-nn) (0.8)\n",
      "Collecting gitpython\n",
      "\u001B[?25l  Downloading https://files.pythonhosted.org/packages/d7/cb/ec98155c501b68dcb11314c7992cd3df6dce193fd763084338a117967d53/GitPython-3.1.12-py3-none-any.whl (159kB)\n",
      "\u001B[K     |████████████████████████████████| 163kB 9.9MB/s \n",
      "\u001B[?25hRequirement already satisfied: pyyaml in /usr/local/lib/python3.6/dist-packages (from labml>=0.4.94->labml-nn) (3.13)\n",
      "Collecting gitdb<5,>=4.0.1\n",
      "\u001B[?25l  Downloading https://files.pythonhosted.org/packages/48/11/d1800bca0a3bae820b84b7d813ad1eff15a48a64caea9c823fc8c1b119e8/gitdb-4.0.5-py3-none-any.whl (63kB)\n",
      "\u001B[K     |████████████████████████████████| 71kB 8.6MB/s \n",
      "\u001B[?25hCollecting smmap<4,>=3.0.1\n",
      "  Downloading https://files.pythonhosted.org/packages/d5/1e/6130925131f639b2acde0f7f18b73e33ce082ff2d90783c436b52040af5a/smmap-3.0.5-py2.py3-none-any.whl\n",
      "Installing collected packages: smmap, gitdb, gitpython, labml, labml-helpers, einops, labml-nn\n",
      "Successfully installed einops-0.3.0 gitdb-4.0.5 gitpython-3.1.12 labml-0.4.94 labml-helpers-0.4.72 labml-nn-0.4.81 smmap-3.0.5\n"
     ],
     "name": "stdout"
    }
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "SE2VUQ6L5zxI"
   },
   "source": [
    "Imports"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "0hJXx_g0wS2C"
   },
   "source": [
    "\n",
    "from labml import experiment\n",
    "from labml_nn.gan.original.experiment import Configs"
   ],
   "execution_count": 1,
   "outputs": []
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "Lpggo0wM6qb-"
   },
   "source": [
    "Create an experiment"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "bFcr9k-l4cAg"
   },
   "source": [
    "experiment.create(name=\"mnist_gan\")"
   ],
   "execution_count": 2,
   "outputs": []
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "-OnHLi626tJt"
   },
   "source": [
    "Initialize configurations"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "Piz0c5f44hRo"
   },
   "source": [
    "conf = Configs()"
   ],
   "execution_count": 3,
   "outputs": []
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "wwMzCqpD6vkL"
   },
   "source": [
    "Set experiment configurations and assign a configurations dictionary to override configurations"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 17
    },
    "id": "e6hmQhTw4nks",
    "outputId": "4be767af-0ebd-4c35-8da0-0e532495e037"
   },
   "source": [
    "experiment.configs(conf,\n",
    "                   {'label_smoothing': 0.01})"
   ],
   "execution_count": 4,
   "outputs": [
    {
     "data": {
      "text/plain": "<IPython.core.display.HTML object>",
      "text/html": "<pre style=\"overflow-x: scroll;\"></pre>"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "KJZRf8527GxL"
   },
   "source": [
    "Start the experiment and run the training loop."
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 649
    },
    "id": "aIAWo7Fw5DR8",
    "outputId": "e3b02247-8ff9-47b5-8f52-49c9e3b8377f"
   },
   "source": [
    "with experiment.start():\n",
    "    conf.run()"
   ],
   "execution_count": 5,
   "outputs": [
    {
     "data": {
      "text/plain": "<IPython.core.display.HTML object>",
      "text/html": "<pre style=\"overflow-x: scroll;\"></pre>"
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": "<Figure size 576x720 with 6 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "ename": "KeyboardInterrupt",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
      "\u001B[0;31mKeyboardInterrupt\u001B[0m                         Traceback (most recent call last)",
      "\u001B[0;32m<ipython-input-5-0592df1e05e4>\u001B[0m in \u001B[0;36m<module>\u001B[0;34m\u001B[0m\n\u001B[1;32m      1\u001B[0m \u001B[0;32mwith\u001B[0m \u001B[0mexperiment\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mstart\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m----> 2\u001B[0;31m     \u001B[0mconf\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mrun\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m      3\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n",
      "\u001B[0;32m~/ml/labmlai/annotated_deep_learning_paper_implementations/labml_helpers/train_valid.py\u001B[0m in \u001B[0;36mrun\u001B[0;34m(self)\u001B[0m\n\u001B[1;32m    246\u001B[0m         \u001B[0m_\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mtrainer\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m    247\u001B[0m         \u001B[0;32mfor\u001B[0m \u001B[0m_\u001B[0m \u001B[0;32min\u001B[0m \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mtraining_loop\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m--> 248\u001B[0;31m             \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mrun_step\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m    249\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m    250\u001B[0m     \u001B[0;32mdef\u001B[0m \u001B[0msample\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mself\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n",
      "\u001B[0;32m~/ml/labmlai/annotated_deep_learning_paper_implementations/labml_helpers/train_valid.py\u001B[0m in \u001B[0;36mrun_step\u001B[0;34m(self)\u001B[0m\n\u001B[1;32m    234\u001B[0m             \u001B[0;32mwith\u001B[0m \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mmode\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mupdate\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mis_train\u001B[0m\u001B[0;34m=\u001B[0m\u001B[0;32mTrue\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m    235\u001B[0m                 \u001B[0;32mwith\u001B[0m \u001B[0mtracker\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mnamespace\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m'train'\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m--> 236\u001B[0;31m                     \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mtrainer\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m    237\u001B[0m             \u001B[0;32mif\u001B[0m \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mvalidator\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m    238\u001B[0m                 \u001B[0;32mwith\u001B[0m \u001B[0mtracker\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mnamespace\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m'valid'\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n",
      "\u001B[0;32m~/ml/labmlai/annotated_deep_learning_paper_implementations/labml_helpers/train_valid.py\u001B[0m in \u001B[0;36m__call__\u001B[0;34m(self)\u001B[0m\n\u001B[1;32m    136\u001B[0m                 \u001B[0msm\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mon_epoch_start\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m    137\u001B[0m         \u001B[0;32mwith\u001B[0m \u001B[0mtorch\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mset_grad_enabled\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mmode\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mis_train\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m--> 138\u001B[0;31m             \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0m__iterate\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m    139\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m    140\u001B[0m         \u001B[0;32mif\u001B[0m \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0m_batch_index\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mcompleted\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n",
      "\u001B[0;32m~/ml/labmlai/annotated_deep_learning_paper_implementations/labml_helpers/train_valid.py\u001B[0m in \u001B[0;36m__iterate\u001B[0;34m(self)\u001B[0m\n\u001B[1;32m    149\u001B[0m                 \u001B[0mbatch\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0mnext\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0m__iterable\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m    150\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m--> 151\u001B[0;31m                 \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mstep\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mbatch\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0m_batch_index\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m    152\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m    153\u001B[0m                 \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0m_batch_index\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mstep\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n",
      "\u001B[0;32m~/ml/labmlai/annotated_deep_learning_paper_implementations/labml_nn/gan/original/experiment.py\u001B[0m in \u001B[0;36mstep\u001B[0;34m(self, batch, batch_idx)\u001B[0m\n\u001B[1;32m    157\u001B[0m                 \u001B[0;32mif\u001B[0m \u001B[0mbatch_idx\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mis_last\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m    158\u001B[0m                     \u001B[0mtracker\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0madd\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m'generator'\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mgenerator\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m--> 159\u001B[0;31m                 \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mgenerator_optimizer\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mstep\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m    160\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m    161\u001B[0m         \u001B[0mtracker\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0msave\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n",
      "\u001B[0;32m~/miniconda/envs/torch/lib/python3.8/site-packages/torch/autograd/grad_mode.py\u001B[0m in \u001B[0;36mdecorate_context\u001B[0;34m(*args, **kwargs)\u001B[0m\n\u001B[1;32m     24\u001B[0m         \u001B[0;32mdef\u001B[0m \u001B[0mdecorate_context\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m*\u001B[0m\u001B[0margs\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0;34m**\u001B[0m\u001B[0mkwargs\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m     25\u001B[0m             \u001B[0;32mwith\u001B[0m \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0m__class__\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m---> 26\u001B[0;31m                 \u001B[0;32mreturn\u001B[0m \u001B[0mfunc\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m*\u001B[0m\u001B[0margs\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0;34m**\u001B[0m\u001B[0mkwargs\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m     27\u001B[0m         \u001B[0;32mreturn\u001B[0m \u001B[0mcast\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mF\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mdecorate_context\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m     28\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n",
      "\u001B[0;32m~/miniconda/envs/torch/lib/python3.8/site-packages/torch/optim/adam.py\u001B[0m in \u001B[0;36mstep\u001B[0;34m(self, closure)\u001B[0m\n\u001B[1;32m    106\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m    107\u001B[0m             \u001B[0mbeta1\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mbeta2\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0mgroup\u001B[0m\u001B[0;34m[\u001B[0m\u001B[0;34m'betas'\u001B[0m\u001B[0;34m]\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m--> 108\u001B[0;31m             F.adam(params_with_grad,\n\u001B[0m\u001B[1;32m    109\u001B[0m                    \u001B[0mgrads\u001B[0m\u001B[0;34m,\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m    110\u001B[0m                    \u001B[0mexp_avgs\u001B[0m\u001B[0;34m,\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n",
      "\u001B[0;32m~/miniconda/envs/torch/lib/python3.8/site-packages/torch/optim/functional.py\u001B[0m in \u001B[0;36madam\u001B[0;34m(params, grads, exp_avgs, exp_avg_sqs, max_exp_avg_sqs, state_steps, amsgrad, beta1, beta2, lr, weight_decay, eps)\u001B[0m\n\u001B[1;32m     92\u001B[0m             \u001B[0mdenom\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0;34m(\u001B[0m\u001B[0mmax_exp_avg_sq\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0msqrt\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m \u001B[0;34m/\u001B[0m \u001B[0mmath\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0msqrt\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mbias_correction2\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0madd_\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0meps\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m     93\u001B[0m         \u001B[0;32melse\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m---> 94\u001B[0;31m             \u001B[0mdenom\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0;34m(\u001B[0m\u001B[0mexp_avg_sq\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0msqrt\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m \u001B[0;34m/\u001B[0m \u001B[0mmath\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0msqrt\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mbias_correction2\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0madd_\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0meps\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m     95\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m     96\u001B[0m         \u001B[0mstep_size\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0mlr\u001B[0m \u001B[0;34m/\u001B[0m \u001B[0mbias_correction1\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n",
      "\u001B[0;32m~/ml/labmlai/annotated_deep_learning_paper_implementations/labml_helpers/training_loop.py\u001B[0m in \u001B[0;36m__handler\u001B[0;34m(self, sig, frame)\u001B[0m\n\u001B[1;32m    162\u001B[0m             \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0m__finish\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m    163\u001B[0m             \u001B[0mlogger\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mlog\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m'Killing loop...'\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mText\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mdanger\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m--> 164\u001B[0;31m             \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mold_handler\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0msig\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mframe\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m    165\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m    166\u001B[0m     \u001B[0;32mdef\u001B[0m \u001B[0m__str__\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mself\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n",
      "\u001B[0;31mKeyboardInterrupt\u001B[0m: "
     ]
    }
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "oBXXlP2b7XZO"
   },
   "source": [
    ""
   ],
   "execution_count": null,
   "outputs": []
  }
 ]
}